package com.jit.monitor.base;

import com.jit.baselib.bean.response.BaseListResponse;
import com.jit.baselib.bean.response.BaseResponse;
import com.jit.monitor.model.bean.EarlyWarning;
import com.jit.monitor.model.response.CtFrameResponse;
import com.jit.monitor.model.response.LoginResponse;
import com.jit.monitor.model.response.MainResponse;
import com.jit.monitor.model.response.WarnHistoryBean;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;

/**
 * @author crazyZhangxl on 2018/11/1.
 *
 * todo 增加预警时间的显示
 *
 */
public interface MyApi {
    String BASE_URL = "http://223.2.197.246:8008/";
    /*------------用户相关--------------*/

    /**
     * 注册账号
     * @param username
     * @param password
     * @return
     */
    @POST("register")
    Observable<BaseResponse> requestRegister(@Query("username") String username,@Query("password") String password);

    /**
     * 登陆
     * @param token 默认的token 标注app身份
     * @param username
     * @param password
     * @return
     */
    @POST("login")
    Observable<BaseResponse<LoginResponse>> requestLogin(@Header("Authorization") String token,@Query("username") String username,@Query("password") String password);

    /**
     * 修改密码 ------ 包含用户token
     * @param username
     * @param oldPassword
     * @param newPassword
     * @return
     */
    @POST("updatePassword")
    Observable<BaseResponse> requestChangePwd(@Query("username") String username,
                                              @Query("oldPassword") String oldPassword,
                                              @Query("newPassword") String newPassword);


    /*-------------动态检测数据管理-------------*/


    /**
     * 获取摄像头列表及当前帧检测统计信息,返回结果为List<cameraId,统计信息>
     * @param page
     * @return
     */
    @GET("dynDection/cameraAndCurrentFrameInfo")
    Observable<BaseListResponse<MainResponse>> getCameraAndCurrentFrameInfo(@Query("page") int page);

    /**
     * 获取当前检测结果的详细信息
     * @param frameId
     * @param objDetType
     * @return
     */
    @GET("dynDection/currentDetailDetInfo")
    Observable<BaseListResponse<CtFrameResponse>> getCurrentDetailDetInfo(@Query("frameId") String frameId, @Query("objDetType") String objDetType);


    /**
     * 通过ID获取检测结果
     * @param userID
     * @param frameId
     * @param objDetType
     * @return
     */
    @GET("dynDection/cameraAndCurrentFrameInfo/{userId}")
    Observable<BaseListResponse<CtFrameResponse>> getCurrentDetailDetInfoByID(
            @Path("userId") int userID,
            @Query("frameId") String frameId,
            @Query("objDetType") String objDetType);


    /*-------------摄像头配置管理-------------*/

    /**
     * 编辑修改摄像头名称
     * @param cameraId
     * @param cameraName
     * @return
     */
    @POST("camera/editName")
    Observable<BaseResponse> editCameraName(@Query("cameraId") String cameraId,@Query("cameraName") String cameraName);


    // TODO: 2018/12/27 用户与设备的绑定
    /**
     * 添加摄像头配置
     * @param body
     * @return
     */
    @POST("camera/bind")
    Observable<BaseResponse> boundCamera(@Body RequestBody body);


    /**
     * 设置预警范围
     * @param body
     * @return
     */
    @POST("earlyWarning/configRang")
    Observable<BaseResponse> setAlarmArea(@Body RequestBody body);

    /**
     * 设置预警铃声
     * @param userId
     * @param warningRing
     * @return
     */
    @POST("earlyWarning/configWarningRing")
    Observable<BaseResponse> setAlarmRing(@Query("userId") int userId,@Query("warningRing") Integer warningRing);


    /**
     * 获取预警铃声
     * @param userId
     * @return
     */
    @GET("earlyWarning/getWarningRing")
    Observable<BaseResponse<Integer>> queryAlarmRing(@Query("userId") int userId);

    /**
     * 获取已设置的预警范围
     * @param userId
     * @return
     */
    @GET("earlyWarning/getWarningRang")
    Observable<BaseListResponse<EarlyWarning>> queryAlarmRange(@Query("userId") int userId);

    /**
     * 进行修改
     * @param cameraId
     * @param flag
     * @return
     */
    @POST("camera/configNotification")
    Observable<BaseResponse> controlNotificationByInfo(@Query("cameraId") String cameraId,@Query("flag") String flag);

    /**
     * 控制LED状态
     * @param cameraId
     * @param ledFlag
     * @return
     */
    @POST("camera/configLedFunc")
    Observable<BaseResponse> controlLedState(@Query("cameraId") String cameraId,@Query("ledFlag") String ledFlag);


    @GET("earlyWarning/warningMsgListByCameraId")
    Observable<BaseListResponse<WarnHistoryBean>> queryWnHsyByCameraID(@Query("cameraId") String cameraId,
                                                                       @Query("page") int page,
                                                                       @Query("pageSize") int pageSize);
}